package com.huangfu.learning.javabase.java.pattern.create.abstractfactory;

/**
 * Created with IntelliJ IDEA.
 * Author: huangfu.daohui
 * Date: 2018/8/2
 * Time: 19:52
 * Version: 1.0
 * Description:抽象工厂模式
 * http://blog.51cto.com/zero01/2070033
 * https://www.imooc.com/article/23795?block_id=tuijian_wz
 * 某客户想要购买一辆车，他要联系4S店，首先得有4S店（抽象工厂）的电话。
 * 客户上网查询（建造工厂），发现了宝马4S店（具体工厂）的电话和奔驰4S店（具体工厂）的电话。
 * 客户拨通了宝马4S店的电话（获取具体工厂），发现目前店里可以提供（生产）多款车型（具体产品）供客户选择（BMW 320、BMW 530，BMW 740）。
 * 客户拨通了奔驰4S店的电话（获取具体工厂），发现目前店里可以提供（生产）多款车型（具体产品）供客户选择（BenzC200、BenzE300）。
 **/
public class AbstractFactory {

    // 测试
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        // 宝马工厂
        AbstractFactoryCar abstractFactoryCar = FactoryProducer.getFactroy("com.huangfu.learning.javabase.java.pattern.create.abstractfactory.BMWFactory");
        Car BMW320 = abstractFactoryCar.getCar("BMW320");
        BMW320.drive();
        Car BMW525 = abstractFactoryCar.getCar("BMW525");
        BMW525.drive();

        // 奔驰工厂
        AbstractFactoryCar abstractFactoryCar1 = FactoryProducer.getFactroy("com.huangfu.learning.javabase.java.pattern.create.abstractfactory.BenzFactory");
        Car benzC200 = abstractFactoryCar1.getCar("BenzC200");
        benzC200.drive();
        Car benzE300 = abstractFactoryCar1.getCar("BenzE300");
        benzE300.drive();
    }
}

